template <class T>
bool AVL<T>::remove(T const &e) {
	BinNodePosi(T) &x = this->search(e);
	if(!x) {
		return false;
	}

	removeAt(x, this->_hot);
	this->_size--;

	for(BinNodePosi(T) g = this->_hot; g; g = g->parent) {
		if(!AvlBalanced(*g)) {
			BinNodePosi(T) &parent = FromParentTo(*g);
			g = parent = this->rotateAt(tallerChild(tallerChild(g)));
		}
		this->updateHeight(g);
	}

	return true;
}